Soru & Cevap

smack ile arkadaşlık taleplerini listeleme

20.07.2014 - 11:16

smack kullanarak kendi kurduğum openfire sunucusuna bağlanıp, sunucudaki başka bir kullanıcı ile mesajlaşabiliyorum.

benim yapmak istediğim login olduktan sonra kullanıcıya gelen arkadaşlık isteklerini listeleyebilmek.

bu konu ile ilgili olarak xabber kaynak kodlarını inceledim ama kodlar çok ileri seviye olduğu için kendi ihtiyacım olan kısmı bu uygulamadan ayıklayamadım.

bu işlemi nasıl yapabilirim. sadece bu konu ile ilgili bir örnek var mıdır, ya da biraz tarif etmeniz mümkün müdür?

12 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user yesilce
yesilce
23.09.2014 - 01:51

[code]public class PresenceListener implements PacketListener {
    @Override
    public void processPacket(Packet packet) {
        //final Presence presence = (Presence)packet;
        //Log.i("CALISMA_NOTU", presence.toXML());
        Log.i("CALISMA_NOTU", "_PL_ (GI) from = " + packet.getFrom());
    }
}[/code]

yukarıda önerdiğiniz kodda "Log.i("CALISMA_NOTU", presence.toXML());" satırı yerine "Log.i("CALISMA_NOTU", "_PL_ (GI) from = " + packet.getFrom());" satırını kullandığımda ilgili arkadaşlık taleplerini görebildim :)

Yardımlarınız için teşekkürler...

picture-1372-1408467635.jpg
ahmtbrk
21.07.2014 - 04:45

benim bildiğim openfirede arkadaşlık olayı şöyle çalışır.genel bir roster grubu olur.Mesela Friends isminde.

Sen bir kişiyi rosterindeki Friends grubuna eklemek istersen ilk önce iq paketi yollarsın.

[code]

public class FriendIQPacket extends IQ {

    private String xmlns,JID,userName;

    public FriendIQPacket(String xmlns, String JID, String userName){
        this.xmlns = xmlns;
        this.JID = JID;
        this.userName = userName;
    }

    @Override
    public String getChildElementXML() {
        return "<query xmlns=\""+xmlns+"\"><item jid=\""+JID.toLowerCase()+"\" name=\""+userName+"\"><group>Friends</group></item></query>";
    }
}

[/code]

karşıdaki kişinin jid i adını vs gönderirisin.Daha sonra arkasınada subscribe presencesi gönderirsin karşı tarafa.

[code]

Presence subscribePresence = new Presence(Presence.Type.subscribe);
subscribePresence.setDefaultXmlns(Config.DEFAULTXMLNS);
subscribePresence.setTo(userList.get(position).getUserJID().toLowerCase());

Model.getInstance().getConnection().sendPacket(subscribePresence);

[/code]

kendi kodlarımdan kopyaladım kafan karışmasın burada.

karşı tarafta bu subscribe presenceyi yakalar ve subscribed sonucu dönderip oda bi iq paketi yollar sana Friends'e eklemiş halde.

bu sayede ikinizde birbirinizin rosterinde Friends şeklinde görünmüş olursunuz.

 

 

ahmet cavus
16.09.2014 - 04:53
Biraz kurcaladım ama openfire, smack konularını inceledim ama bir sonuç alamadım. Elinizde tek formluk openfire server'a bağlanan ve form üzerindeki listbox'a gelen yeni arkadaşlık taleplerini yazdıran bir uygulama var mıdır, ya da böyle küçük bir örnek uygulama yazmanız mümkün müdür?
Ahmet Burak Demirkoparan
16.09.2014 - 05:02
bağlanma kısmını en güncel smack apisi ile birlikte sana gösteririmde friend request kısmını net olarak bilmiyorum cok kurcalamam lazım onada malesef vaktim yok. vakit bulur bulmaz bi deneyip buraya ekleyeceğim.
Profile picture for user yesilce
yesilce
21.07.2014 - 03:35

sözünü ettiğiniz değişiklikleri yaptım.

sistemde windows ve anroid olarak iki kullanıcı var.

windows kulalnıcısı ile spark kullanarak login oldum ve android kullanıcısını arkadaş listeme ekledim. daha sonra android kullanıcısını kullanan uygulamamı çalıştırdım.

log olarak aşağıdakiler geldi, logda windows kullanıcısı ile herhangi bir ibare yok...

07-21 15:32:05.386: I/CALISMA_NOTU(1661): <presence id="6Y3JY-3" to="android@192.168.10.149/Smack" from="android@192.168.10.149/Smack"></presence>

07-21 15:32:05.386: I/CALISMA_NOTU(1661): <presence id="6Y3JY-4" to="android@192.168.10.149/Smack" from="android@192.168.10.149/Smack"></presence>

 

Ahmet Burak Demirkoparan
21.07.2014 - 03:39
arkadaş olarak nasıl ekliyorsun kodunu verebilir misin?
ahmet cavus
21.07.2014 - 04:32
aslında şu an için ekleme işlemini spark kullanarak yapıyorum. yani windows bilgisayarı üzerinden windows kullanıcısı ile griş yapıp arkadaş ekle menüsünden android kullanıcısını ekliyorum. android kullanıcısını benim yazmış olduğum uygulama kullanıyor.
picture-1372-1408467635.jpg
ahmtbrk
21.07.2014 - 03:32

Presence listener register edip presence dinliyor musun?

Bir class'ın olsun PresenceListener isminde.

[code]

public class PresenceListener implements PacketListener {

@Override
    public void processPacket(Packet packet) {
        final Presence presence = (Presence)packet;

        Log.i("PresenceListener",presence.toXML());

}

}

[/code]

bunuda connection olduğun yerde register etmelisin.

[code]connection.addPacketListener(new PresenceListener(),new PacketTypeFilter(Presence.class));[/code]

sana verdiğim mekanizmada kişilerin durum güncellemeleri(aynı msn'deki gibi çevrimiçi,meşgul vs) ayrıca senle diğer kişilerin rosterdeki group ve bağlantılarını gönderen bir yapı var.subscribe ve subscribed typesinde olan presenceler var.bunlardan birisi sana atılan rostere ekleme talebini gösteriyorda tam hatırlamıyorum.

Log çıktısı verdim üstte programa girince PresenceListener isminde atılan tüm logları buraya yazabilir misin.Ama x kişiden kendine bi friend requestte bulun daha sonra kendi kullancıın ile login ol.

ahmet cavus
29.09.2014 - 04:17
yukarıda önerdiğiniz kodda "Log.i("CALISMA_NOTU", presence.toXML());" satırı yerine "Log.i("CALISMA_NOTU", "_PL_ (GI) from = " + packet.getFrom());" satırını kullandığımda ilgili arkadaşlık taleplerini görebildim :) Yardımlarınız için teşekkürler...